#include "implementacionsteming.h"
//
implementacionSteming::implementacionSteming(  ) 
{
	// TODO
}
//
implementacionSteming::~implementacionSteming()
{
}
//
void implementacionSteming::verificarSteming(string archivoOriginal,string archivoNuevo){
	   string archivoConPath = directorioTxtProcesados + '/' + archivoOriginal;
	   string archivoStemConPath = directorioTxtProcesados + '/' + archivoNuevo;
	   FILE* archivo = fopen(archivoConPath.c_str(),"r+");
	   FILE* archivoSteming = fopen(pathSteming.c_str(),"r+");
	   FILE* archivoStem = fopen(archivoStemConPath.c_str(),"w+");
	   
	   if(archivoSteming && archivo){
			int c;
			char palabraOriginal[tamanioMaximoPalabra];
			char stemming[tamanioMaximoPalabra];
			memset(palabraOriginal,'\0',tamanioMaximoPalabra);
			int d;
			
			while( d = fscanf(archivo,"%s",palabraOriginal) != EOF ){
			     string w;
			     memset(stemming,'\0',tamanioMaximoPalabra);
			     rewind(archivoSteming);
			     
			     while( c = fscanf(archivoSteming,"%s",stemming) != EOF ){
		        	string::size_type pos;
		        	string stem(stemming);
		        	string pOrig(palabraOriginal);
		        	w = pOrig;
		        	
		        	if(pOrig.length()>stem.length() &&
		        	   pOrig.compare(pOrig.length()-stem.length(),pOrig.length(),stem)==0){
		        		pOrig = pOrig.substr(0,pOrig.length()-stem.length());
		        		w = pOrig + "*";
		        		break;
	        		}
		        	memset(stemming,'\0',tamanioMaximoPalabra);
        	 	 }
        	 	 string espacio=(" ");
		         fwrite (w.c_str() , 1 ,w.length() , archivoStem );	
		         fwrite (espacio.c_str() , 1 ,espacio.length() , archivoStem );	
   
			     //limpio todo para evitar problemas de asignacion
				 memset(palabraOriginal,'\0',tamanioMaximoPalabra);
			}
			
			fflush(archivoStem);
			fclose(archivoSteming);
			fclose(archivo);
			fclose(archivoStem);
			std::remove(archivoConPath.c_str()); //borro el archivo original procesado del directorio
		}
}

string implementacionSteming::verificarSteming(string palabra){
	   FILE* archivoSteming = fopen(pathSteming.c_str(),"r+");
	      
	   if(archivoSteming){
			int c;
			char palabraOriginal[tamanioMaximoPalabra];
			char stemming[tamanioMaximoPalabra];
			string w;
			
			memset(stemming,'\0',tamanioMaximoPalabra);
					     
		    while( c = fscanf(archivoSteming,"%s",stemming) != EOF ){
	        	string::size_type pos;
	        	string stem(stemming);
	        	string pOrig(palabra);
	        	w = pOrig;
	        	
	        	if(pOrig.length()>stem.length() &&
	        	   pOrig.compare(pOrig.length()-stem.length(),pOrig.length(),stem)==0){
	        		pOrig = pOrig.substr(0,pOrig.length()-stem.length());
	        		w = pOrig + "*";
	        		break;
        		}
	        	memset(stemming,'\0',tamanioMaximoPalabra);
       	 	}
       	 	
       	 	//cierro el archivo 	 
			fclose(archivoSteming);
			archivoSteming = NULL;
			
			return w;
			
		}
		else{
			return palabra;
		}
}

bool implementacionSteming::esSteming(string palabra){
	FILE* archivoSteming = fopen(pathSteming.c_str(),"r+");
	      
	   if(archivoSteming){
			int c;
			char palabraOriginal[tamanioMaximoPalabra];
			char stemming[tamanioMaximoPalabra];
			bool EsStemming = false;
			
			memset(stemming,'\0',tamanioMaximoPalabra);
					     
		    while( c = fscanf(archivoSteming,"%s",stemming) != EOF ){
	        	string::size_type pos;
	        	string stem(stemming);
	        	string pOrig(palabra);
	        
	        	
	        	if(pOrig.length()>stem.length() &&
	        	   pOrig.compare(pOrig.length()-stem.length(),pOrig.length(),stem)==0){
	        		EsStemming = true;
	        		break;
        		}
	        	memset(stemming,'\0',tamanioMaximoPalabra);
       	 	}
       	 	
       	 	//cierro el archivo 	 
			fclose(archivoSteming);
			archivoSteming = NULL;
			
			return EsStemming;
			
		}
		else{
			return false;
		}
}


